package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.pojo.Account;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 包名:com.itheima.service.impl
 * @author Leevi
 * 日期2020-08-12  10:57
 * 持久层不同的框架有不同的事务控制方案:
 * 1. 原始的JDBC:
 *    1.1 开启事务: connection.setAutoCommit(false);
 *    1.2 提交事务: connection.commit();
 *    1.3 回滚事务: connection.rollback();
 *
 * 2. DBUtils框架: 和原始的JDBC是一样的
 * 3. mybatis框架: 底层也是使用的JDBC的事务
 *    3.1 开启事务: sqlSessionFactory.openSession(); 开启事务
 *    3.2 提交事务: sqlSession.commit();
 *    3.3 回滚事务: sqlSession.rollback();
 * 4. 只要某个持久层框架和spring整合了，那么事务相关的操作就都交给spring控制
 *    4.1 编程式事务(了解)
 *    4.2 声明式事务(重点掌握)
 */
//@Transactional(rollbackFor = Exception.class,noRollbackFor = NullPointerException.class)
//@Service
public class AccountServiceImpl2 implements AccountService{
    @Autowired
    private AccountDao accountDao;

    @Override
    public void transfer(String fromName, String toName, double money) {
        //1. 转出账户扣款
        accountDao.updateAccount(new Account(null,fromName,-money));
        //出现异常
        int num = 10/0;
        //2. 转入账户收款
        accountDao.updateAccount(new Account(null,toName,money));
    }
}
